# SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: LicenseRef-NvidiaProprietary
#
# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual
# property and proprietary rights in and to this material, related
# documentation and any modifications thereto. Any use, reproduction,
# disclosure or distribution of this material and related documentation
# without an express license agreement from NVIDIA CORPORATION or
# its affiliates is strictly prohibited.

[package]
title = "{{ application_display_name }}"
version = "{{ version }}"
description = "A reference application for reviewing and constructing large facilities such as factories, warehouses and more."
keywords = ["app", "usd", "explore"]  # That makes it browsable in UI with "experience" filter
template_name = "omni.usd_explorer"

[dependencies]
"omni.activity.ui" = {}
"omni.activity.usd_resolver" = {}
"omni.hydra.engine.stats" = {}
"omni.hydra.pxr" = {}
"omni.hydra.pxr.settings" = {}
"omni.kit.asset_converter" = {} # File format conversion
"omni.kit.browser.asset" = {}  # Enable the NVIDIA asset Browsing only
"omni.kit.browser.sample" = {}  # Examples
"omni.kit.collaboration.channel_manager" = {}
"omni.kit.collaboration.presence_layer" = {}
"omni.kit.collaboration.selection_outline" = {}
"omni.kit.collaboration.telemetry" = {}
"omni.kit.collaboration.viewport.camera" = {}
"omni.kit.context_menu" = {}
"omni.kit.converter.cad" = {order = 1000} # allow other deps like asset_importer to load first
"omni.kit.developer.bundle" = {}
"omni.kit.manipulator.camera" = {} # Manipulator for the Viewport
"omni.kit.manipulator.prim" = {}
"omni.kit.manipulator.selection" = {}
"omni.kit.manipulator.transform" = {}
"omni.kit.menu.common" = { order = 1000 }
"omni.kit.menu.edit" = {}
"omni.kit.menu.file" = {}
"omni.kit.property.bundle" = {}
"omni.kit.property.layer" = {}
"omni.kit.quicklayout" = {} # Quicklayout is on enabling custom layouts
"omni.kit.renderer.core" = {}
"omni.kit.search.service" = {}
"omni.kit.selection" = {}
"omni.kit.stage_column.payload" = {}  # Those are extra stage window columns that are not enabled by default
"omni.kit.stage_templates" = {}  # Stage templates
"omni.kit.telemetry" = {} # Telemetry
"omni.kit.timeline.minibar" = {} # For animation
"omni.kit.tool.asset_importer" = {}
"omni.kit.tool.camera_playlist" = {}
"omni.kit.tool.markup" = {}
"omni.kit.tool.measure" = {}
"omni.kit.tool.remove_unused.controller" = {}
"omni.kit.uiapp" = {}  # The Main UI App. Bring everything needed for UI application.
"omni.kit.usd_explorer.main.menubar" = { order = 12000 }
"omni.kit.usd_explorer.render" = {}
"omni.kit.usd_explorer.window.welcome" = { order = 10 }
"omni.kit.viewport.legacy_gizmos" = {}
"omni.kit.viewport.menubar.camera" = {}
"omni.kit.viewport.menubar.framerate" = {}
"omni.kit.viewport.menubar.lighting" = {}
"omni.kit.viewport.menubar.markup" = {}
"omni.kit.viewport.menubar.nav_bar_toggle" = { order = -30 }
"omni.kit.viewport.menubar.timeline" = { order = -20 }
"omni.kit.viewport.menubar.waypoint" = {}
"omni.kit.viewport.ready" = {}
"omni.kit.viewport.rtx" = {}  # Load the RTX rendering bundle
"omni.kit.viewport.scene_camera_model" = {}  # Push camera changes to Viewport ui.scene as fast as possible
"omni.kit.viewport.window" = {}
"omni.kit.waypoint.playlist" = {}
"omni.kit.widget.filebrowser" = {} # General purpose widgets to browsder and select fles
"omni.kit.widget.layers" = {}
"omni.kit.widget.live" = {}  # Includes Cache status display
"omni.kit.window.about" = {}
"omni.kit.window.console" = {}  # Enable to write some python script, disable by default
"omni.kit.window.content_browser" = {}
"omni.kit.window.cursor" = {}
"omni.kit.window.drop_support" = {}
"omni.kit.window.file" = {}
"omni.kit.window.filepicker" = {}
"omni.kit.window.material" = {}  # Material Management and browsing
"omni.kit.window.preferences" = { order = 1000 } # Execute last so the menu is in the correct place
"omni.kit.window.property" = {}
"omni.kit.window.section" = {}
"omni.kit.window.stage" = {}
"omni.kit.window.stats" = { order = 1000 }  # Show the stats of the renderer
"omni.kit.window.status_bar" = {}
"omni.kit.window.title" = {}
"omni.kit.window.toolbar" = {}
"omni.light_rigs" = {}
"omni.resourcemonitor" = {}  # Needed for Fabric delegate
"omni.rtx.settings.core" = {}  # This is the Render Settings 2.0
"omni.scene.optimizer.bundle" = {}
"omni.stats" = {}  # This is not strictly needed
"omni.timeline.live_session" = {}
"omni.usd.metrics.assembler.ui" = {}
"omni.usd.schema.metrics.assembler" = {}
"omni.warp.core" = {}
"usdrt.scenegraph" = {}
"{{ setup_extension_name }}" = { order = 10000 }  # This is your application setup Extensions. order = 10000 makes it run last

[dependencies."filter:platform"."windows-x86_64"]
"omni.kit.window.modifier.titlebar" = {version = "=105.2.16"}  # Use exact version to avoid supported target platform check

[settings.app]
name = "{{ application_display_name }}"
fastShutdown = true  # Fast shutdown by default
useFabricSceneDelegate = true  # Turn on the Fabric scene delegate by default

[settings.app.content]
emptyStageOnStart = true # This will create a stage during the startup process.

[settings.app.docks]
autoHideTabBar = false
noWindowMenuButton = false

[settings.app.environment]
name = "{{ application_display_name }}"

[settings.app.extensions]
excluded = [
	"omni.kit.viewport.menubar.render",
	"omni.kit.viewport.menubar.settings",
]
generateVersionLockExclude = [
	"{{ setup_extension_name }}",
]
registryEnabled = true
skipPublishVerification = false

[settings.app.extensions."filter:platform"."linux-x86_64"]
# Windows only extensions. For all of them set exact=true to not be included into generated version lock.
# That will break linux otherwise, as version lock is platform agnostic currently.
excluded = [
	"omni.kit.window.modifier.titlebar",
]

[settings.app.exts]
folders.'++' = [   # Search paths for extensions.
	"${app}/../exts",
	"${app}/../extscache/"]

[settings.app.font]
file = "${fonts}/OpenSans-SemiBold.ttf"
size = 16

[settings.app.hangDetector]
# Hang Detector
enabled = false
timeout = 120

[settings.app.liveSession]
enableMenuFollowUser = false

[settings.app.material]
disableMtlx = true  # Disable MaterialX to ensure Material Watcher doesn't impact startup time

[settings.app.menu]
compatibility_mode = false  # Use omni.ui.Menu for the MenuBar
legacy_mode = false  # Deprecate support for old kit.ui.menu

[settings.app."omni.usd"]
getRenderablePaths.parallel = 4  # Enable parallel mode for selection performance
loadRenderSettingsFromUsdStage = false  # Ensure consistent settings across all USD stages independently of what was saved to them

[settings.app.primCreation]
enableMenuAudio = false
enableMenuCamera = false
hideShapes = true # Don't show Create->Shape menus

[settings.app.renderer]
resolution.height = 1080
resolution.width = 1920
skipWhileMinimized = true

[settings.app.settings]
dev_build = true
persistent = true

[settings.app.startup]
expandViewport = true

[settings.app.tools]
modal_tool_active = false  # Tool State Management

[settings.app.usdrt.population.utils]
mergeInstances = false # When populating Fabric from USD, merge meshes under scene graph instances.

[settings.app.viewport]
boundingBoxes.hideWhenManipulating = true
createCameraModelRep = true  # Enable creation of camera meshes in USD
grid.enabled = true
outline.enabled = true
showCameraMenu = false
showHideMenu = false
showRendererMenu = false
showSettingMenu = false
snapEnabled = true

[settings.app.viewport.defaultCamera.target.distance]
enabled = true
units = "meters"
value = 5

[settings.app.viewport.defaults]
fillViewport = false  # default to fill viewport

[settings.app.viewport.defaults.hud]
camera.controllerUseSRT = true
captureFrame.viewport = true
deviceMemory.visible=false
hostMemory.visible=false
primCreation.typedDefaults.camera.focalLength = 15
renderFPS.visible=false
rendering.whiteModeExceptions = 'GizmoTex, Gizmo, OmniGlass, SunsetSkyMat, ProceduralSky, Blue_Glass, Clear_Glass, Dull_Glass, Frosted_Glass, Glazed_Glass, Green_Glass, Mirror, Red_Glass, Tinted_Glass, Tinted_Glass_R02, Tinted_Glass_R25, Tinted_Glass_R50, Tinted_Glass_R75, Tinted_Glass_R85, Tinted_Glass_R98, Cirrus, CumulusHeavy, CumulusLight, Overcast, NightSky'
renderProgress.visible=false
renderResolution.visible=false
transform.gizmoUseSRT = true

[settings.app.viewport.defaults.hud.file]
initDialogHeight = 800
initDialogWidth = 1200
recentFiles = []
save.showUnsavedLayersDialog = true

[settings.app.viewport.defaults.hud.omniverse]
content_browser.options_menu.show_details = true # Make Detail panel visible by default
filepicker.options_menu.show_details = true
tooltipEnabled = false

[settings.app.viewport.defaults.hud.stage]
instanceableOnCreatingReference = false
movePrimInPlace = false
upAxis = 'Z'

[settings.app.viewport.defaults.hud.viewport]
camInertiaAmount = 0.0
camInertiaEnabled = false
camVelocityMax = 20.0
displayOptions = 32767  # Disable Frame Rate and Resoltion by default
previewOnPeek = false
snapToSurface = false
Viewport0.fillViewport = false
Viewport1.fillViewport = false

[settings.app.viewport.offsets]
navBottom = 0

[settings.app.viewport.show]
audio = false
camera = false
lights = false

[settings.app.window]
displayModeLock = false
fullscreen = false
height = 1010
iconPath = "${% raw %}{{% endraw %}{{ setup_extension_name }}{% raw %}}{% endraw %}/data/nvidia-omniverse-usd_explorer.ico"
imagePath = "${% raw %}{{% endraw %}{{ setup_extension_name }}{% raw %}}{% endraw %}/data/nvidia-omniverse-usd_explorer_about.png"
minimalPanelsOnStartup = true
showStartup = true
showStatusBar = false
title = "{{ application_display_name }}"
toolBarHorizontal = false
uiStyle = 'NvidiaDark'
width = 1920
x = -1
y = -1

[settings.crashreporter.data]
experience = "{{ application_display_name }}"

[settings.ext."omni.kit.widget.viewport".sceneView.singleCameraModel]
enabled = true  # Enable single Viewport camera model (setting w/ typo in current Kit)

[settings.exts.foundation]
verifyOsVersion.enabled = false

[settings.exts."omni.kit.browser.asset"]
folders = [
	"http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/ArchVis/Commercial",
	"http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/ArchVis/Industrial",
	"http://omniverse-content-production.s3-us-west-2.amazonaws.com/Assets/DigitalTwin/Assets/Warehouse",
]

[settings.exts."omni.kit.browser.material"]
enabled = false
folders = [
    "Base::http://omniverse-content-production.s3-us-west-2.amazonaws.com/Materials/2023_1/Base",
]

[settings.exts."omni.kit.browser.sample"]
folders = [
	"https://omniverse-content-production.s3.us-west-2.amazonaws.com/Usd_Explorer/Samples/Examples/2023_2",
]
folders_hide_in_category = [
	"2023_2",
]

[settings.exts."omni.kit.browser.sky"]
folders = [
    "Skies (S3)::https://omniverse-content-production.s3.us-west-2.amazonaws.com/Assets/Skies/2022_1/Skies/",
]

[settings.exts."omni.kit.compatibility_checker"]
supportedGpus = [
    "*GeForce RTX ????*",
    "*Quadro RTX ????*",
    "*RTX ?????*",
    "*RTX????*",
    "*TITAN RTX*"
]

[settings.exts."omni.kit.manipulator.tool.snap"]
# Have snap to surface as default option
providerNames = [
	"Surface (Framebuffer Based)",
	"Surface (Mesh Based)",
]

[settings.exts."omni.kit.markup.core"]
enable_hotkeys = true
show_icons = false

[settings.exts."omni.kit.material.library"]
lib_paths = [
	"${kit}/mdl/core/Base",
	"",
]
original_svg_color = true
ui_hidden_list = [
	"${kit}/mdl/core/Base/OmniPBR_Opacity.mdl",
    "${kit}/mdl/core/Base/OmniPBR_ClearCoat_Opacity.mdl",
    "${kit}/mdl/core/Base/OmniGlass_Opacity.mdl",
    "${kit}/mdl/core/Base/SimPBR_Model.mdl",
	"${kit}/mdl/core/Base/OmniEmissive.mdl",
	"${kit}/mdl/core/Base/OmniHair.mdl",
	"${kit}/mdl/core/Base/OmniHairPresets.mdl",
	"${kit}/mdl/core/Base/OmniPBR_ClearCoat.mdl",
	"${kit}/mdl/core/Base/OmniPBR_ClearCoat_Opacity.mdl",
	"${kit}/mdl/core/Base/OmniPBR_Opacity.mdl",
	"${kit}/mdl/core/Base/OmniPBRBase.mdl",
	"${kit}/mdl/core/Base/OmniSurface.mdl",
	"${kit}/mdl/core/Base/OmniSurfaceBlend.mdl",
	"${kit}/mdl/core/Base/OmniSurfaceLite.mdl",
	"${kit}/mdl/core/Base/OmniSurfacePresets.mdl",
	"${kit}/mdl/core/Base/SimPBR.mdl",
	"${kit}/mdl/core/Base/SimPBR_Model.mdl",
	"${kit}/mdl/core/Base/SimPBR_Translucent.mdl",
]

[settings.exts."omni.kit.mesh.raycast"]
bvhBuildOnFirstRequired = true  # Avoids mesh raycast to initialize during stage open

[settings.exts."omni.kit.menu.utils"]
logDeprecated = false

[settings.exts."omni.kit.playlist.core"]
smooth_with_time_sampling = true

[settings.exts."omni.kit.property.usd"]
show_prefs = false

[settings.exts."omni.kit.renderer.core".imgui]
enableMips = true

[settings.exts."omni.kit.timeline.minibar"]
offsetBottom = 10
scale_with_nav_bar = true
stay_on_playing = true
toggleByHover = false

[settings.exts."omni.kit.tool.asset_importer"]
useNewFilePicker = true

[settings.exts."omni.kit.tool.collect"]
useNewFilePicker = true

[settings.exts."omni.kit.tool.markup"]
toolbar.offset = 160  # Markup toolbar offset, keeps us above the navbar

[settings.exts."omni.kit.tool.measure"]
enable_hotkeys = true

[settings.exts."omni.kit.tool.teleport"]
basicGizmo = true
beamVisible = false
eyeHeight = 175
max_slope_angle = 30.0
simple_camera = false
widgetScale = 0.7

[settings.exts."omni.kit.usd_explorer.main.menubar"]
include_approve_mode = false
include_file_menu = true
include_modify_mode = true
include_present_mode = false
include_render_modes  = false
switch_to_present_on_open = false

[settings.exts."omni.kit.usd_explorer.window.welcome"]
alwaysClosable = true

[settings.exts."omni.kit.viewport.menubar.framerate"]
visible = true
currentPreset = "60x2"

[settings.exts."omni.kit.waypoint.core"]
enable_hotkeys = true
show_icons = false

[settings.exts."omni.kit.widget.cloud_share"]
require_access_code = false

[settings.exts."omni.kit.widget.graph"]
raster_nodes = true

[settings.exts."omni.kit.widget.layers"]
useNewFilePicker = true

[settings.exts."omni.kit.widget.live_session_management"]
quick_join_enabled = false
session_list_select = "DefaultSession"

[settings.exts."omni.kit.widget.toolbar".PlayButton]
enabled = false

[settings.exts."omni.kit.widget.viewport".sceneView.singleCameraModel]
enabled = true  # Enable single Viewport camera model

[settings.exts."omni.kit.window.content_browser"]
enable_thumbnail_generation_images = false
show_grid_view = false

[settings.exts."omni.kit.window.extensions"]
hideNonToggleableExts = true
showFeatureOnly = false

[settings.exts."omni.kit.window.file"]
useNewFilePicker = true

[settings.exts."omni.kit.window.material"]
load_after_startup = true
show_capture_thumbnail_menu = true

[settings.exts."omni.kit.window.modifier.titlebar"]
changeWindowRegion = true
colors.caption = 0x0F0F0F
colors.client = 0x0F0F0F
defaultFont.color = 0xD0D0D0
defaultFont.size = 18
icon.file = "${% raw %}{{% endraw %}{{ setup_extension_name }}{% raw %}}{% endraw %}/data/nvidia-omniverse-usd_explorer.ico"
icon.size = 18
icon.use_size = false
respondOnMouseUp = true
separator.color = 0x00B976
separator.width = 1
showFileFullPath = true
titleFormatString = "  {{ application_display_name }} {{version}} {separator} {file, board=true}"
windowBorder.color = 0x0F0F0F
windowBorder.width = 2

[settings.exts."omni.kit.window.preferences"]
show_audio = false
show_rendering = false
show_resource_monitor = false
show_tagging = false
show_thumbnail_generation_mdl = false

[settings.exts."omni.kit.window.viewport"]
blockingGetViewportDrawable = false

[settings.exts."omni.kit.viewport.menubar.camera"]
expand = true  # Expand the extra-camera settings by default
showManualExposure = true  # Enable FOV drop-down in viewport ribbon
showStageCameras = false

[settings.exts."omni.kit.viewport.menubar.display".showByType]
exclude_list = ["Audio"]

[settings.exts."omni.kit.viewport.menubar.lighting"]
autoLightRig.enableWithoutMenu = true  # Enable adding a light rig whether menu item is loaded/visible or not
defaultRig = "Sunny Sky"  # Set the default light-rig to apply for a stage opened without any lights in it
rigImport.lightRemovalLimit = 3
rigs = "${omni.light_rigs}/light_rig_data/light_rigs"  # Setup path to the light-rig items in the lighting menu

[settings.exts."omni.kit.viewport.navigation.camera_manipulator"]
orbitAutoFrameSelected = true

[settings.exts."omni.kit.viewport.navigation.core"]
bottom_offset = 10
bottom_spacing = 10
enable_hotkeys = true
isVisible = false # Hide navigation bar while welcome window is visible

[settings.exts."omni.kit.viewport.navigation.markup"]
visible = false

[settings.exts."omni.kit.viewport.navigation.waypoint"]
visible = false

[settings.exts."omni.kit.viewport.window"]
startup.windowName = "Viewport"
hud.hostMemory.perProcess = true

[settings.exts."omni.light_rigs"]
setup_extension_name="{{ setup_extension_name }}"

[settings.exts."omni.services.transport.server.http"]
port = 8311 # Setting the port for the embedded http server, using custom port for your application make sure not to collide with other apps

[settings.exts."omni.ui".raster]
default_rasterpolicy_enabled = true # reduce overhead of UI in Layout mode

[settings.exts."omni.ui".workpace.draw_freeze]
enabled = true
frames = 5

[settings.exts."omni.usd"]
enableUsdMaterialWatcherForFsd = true

[settings.omnihydra]
parallelHydraSprimSync = true  # Sync materials in parallel from within Hydra

[settings.persistent.app.newStage]
defaultTemplate = "SunnySky"  # Change default stage template to what we have in the setup extension

[settings.persistent.app.stage]
upAxis = 'Z'

[settings.persistent.app.viewport]
camMoveVelocity = 1.5
camVelocityMax = 50
camVelocityMin = 0.01
pickingMode = "kind:model.ALL"

[settings.persistent.app.viewport.manipulator.camera]
flyAcceleration = 1000.0
flyDampening = 10.0
lookAcceleration = 2000.0
lookDampening = 20.0
moveAcceleration = 1000.0
moveDampening = 10.0
tumbleAcceleration = 2000.0
tumbleDampening = 20.0

[settings.persistent.exts."omni.kit.environment.core".rtx.env.ground]
enable = false  # Making a ground for whatever reason bewteen scene loads is causing side car issues.

[settings.persistent.exts."omni.kit.manipulator.camera"]
inertiaDecay = 3
tumbleSpeed = 720

[settings.persistent.exts."omni.kit.manipulator.prim.core".manipulator]
placement = "Bounding Box Base"

[settings.persistent.exts."omni.kit.manipulator.tool.snap"]
# Snap tool default persistent settings
conformToTarget = true
conformUpAxis = "Stage"
explicitTransform.rotate = 15.0
explicitTransform.scale = 1.0
explicitTransform.translate = 10.0
keepSpacing = true

[settings.persistent.exts."omni.kit.manipulator.transform"]
tools.defaultCollapsed = false # Expand prim manipulator toolbar

[settings.persistent.exts."omni.kit.viewport.menubar.camera"]
expand = true  # expand was set to False in omni.kit.viewport.bundle

[settings.persistent.exts."omni.kit.viewport.menubar.lighting"]
autoLightRig.enabled = true

[settings.persistent.exts."omni.kit.viewport.window"]
cameraSpeedMessage.showFlyViewLock = true

[settings.privacy]
externalBuild = true

[settings.renderer]
active = "rtx"  # RTX As the default renderer always
enabled = "rtx"  # only enable rtx renderer by default

[settings.renderer.multiGpu]
enabled = false  # do not enable Multi-GPU, will choose the "best" GPU
maxGpuCount = 1  # this ensures at most one GPU is enabled even if /persistent/renderer/multiGpu/enabled=true was saved in user.config.json

[settings.rtx.directLighting.sampledLighting]
enabled = true

[settings.rtx.domeLight]
upperLowerStrategy = 4  # Approximated Image-Based Lighting

[settings.rtx.ecoMode]
enabled = true

[settings.rtx.hydra]
minFreeDeviceMemory = 3000
readTransformsFromFabricInRenderDelegate = true

[settings.rtx.newDenoiser]
enabled = true

[settings.rtx.post]
dlss.execMode = 1  # DLSS Balanced mode instead of Auto
histogram.enabled = true # auto-exposure

[settings.rtx.reflections]
maxRoughness = 0.11  # instead of default of 0.3, reduces GPU time spent on reflections

[settings.rtx.sceneDb]
ambientLightIntensity = 1.0

[settings.rtx-flags]
rendermode = 1

[settings.rtx-transient.hydra]
conservativeMemoryLimits = true # Stop loading geometry when memory goes below specified thresholds
maxInstanceCount = 12000000  # Limit the number of instances to 12 million to cap performance and memory impact of larger instance counts

[settings.rtx-transient.meshlights]
forceDisable = true  # Disable use mesh light sampling, not critical

[settings.rtx-transient.scenedb]
useUniformsReindexing = true

[settings.structuredLog]
enable = true

[settings.telemetry]
# Anonymous Kit application usage telemetry
enableAnonymousData = true
enableAnonymousAppName = true


[[test]]
samplingFactor = 1.0  # No test sampling for these tests

dependencies = [
	"omni.kit.ui_test",
    #"omni.hydra.pxr",
    # NOTE: test_extensions.py (with imports from omni.kit.core.tests) need dependencies from some extensions
    "omni.kit.test_helpers_gfx",  # test dependency from omni.renderer.core
    "omni.rtx.tests",  # test dependency from omni.hydra.scene_api
]


pythonTests.include = [
    "{{ setup_extension_name }}.tests.*",
]
args = [
	"--portable",
    "--/app/window/width=1600",
    "--/app/window/height=900",
    "--/app/window/dpiScaleOverride=1.0",
    "--/app/window/scaleToMonitor=false",
    "--/app/file/ignoreUnsavedOnExit=true",
    "--/app/testMode=1",
    "--/app/fastShutdown=1",
	"--/exts/omni.kit.test/testExtCodeChangeAnalyzerEnabled=false",
    "--no-window",
	"--/exts/omni.kit.pipapi/allowOnlineIndex=0", # Make sure it starts without any pip installs
]

stdoutFailPatterns.exclude = [
	"*Warning: The NumPy module was reloaded*"
]

timeout = 600
